#include <stdio.h>

int main(void)
{
    int scores[100];

    int a[5] = {1, 2, 3, 4, 5};

    // int b[5] = {1, 2, 3, 4, 5, 6}; // 大括号里面的值不能多于数组的长度，否则编译时会报错

    int c[5] = {1, 2, 3}; // 少于数组的成员数量，那么未赋值的成员自动初始化为0

    int d[100] = {0}; // 将整个数组的每一个成员都设置为零，最简单的写法

    int e[15] = {1, [5] = 10, 11, [10] = 20, 21}; // 示例中，0号、5号、6号、10号、11号被赋值

    int f[] = {1, 2, 3}; // 自动确定数组长度

    int g[] = {[2] = 6, [9] = 12}; // 示例中，数组a的最大指定位置是9，所以数组的长度是10

    size_t size = sizeof(g);
    size_t itemSize = sizeof(int);
    size_t itemCount = size / itemSize;

    printf("%zu, %zu, %zu\n", size, itemSize, itemCount); // 40, 4, 10

    int h[2][5] = {{0, 1, 2, 3, 4},
                   {5, 6, 7, 8, 9}};

    int i[2][2] = {[0][0] = 1, [1][1] = 2}; // 指定了[0][0]和[1][1]位置的值，其他位置就自动设为0

    // 不管数组有多少维度，在内存里面都是线性存储，a[0][0]的后面是a[0][1]，a[0][1]的后面是a[1][0]，以此类推。因此，多维数组也可以使用单层大括号赋值，下面的语句与上面的赋值语句是完全等同的。
    int j[2][2] = {1, 0, 0, 2};
}